package zf.media.audio
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Sprite;
	
	import zf.media.audio.spectrum.*;
	import zf.media.audio.SoundSpectrumMode;

	/**
	 * 声音频谱精灵，用于控制和显示频谱（使频谱成图） 
	 * @author mike.zhang
	 * @langversion 3.0 
	 * @playerversion Flash 9 
	 */
	public class SoundSpectrumSprite extends Sprite
	{
		private var bg:Bitmap;
		private var index:uint;
		private var _ss:SoundSpectrum;
		
		//private var _type:String;
		private var _ff:Boolean;
		
		//private var oldSoundSpectrum

		/**
		 * 创建一个声音频谱精灵 
		 * 
		 */
		public function SoundSpectrumSprite ():void
		{
			index=0;
			_ss=null;
			bg=null;
			_ff=false;
		}
		/**
		 * 创建声音频谱图像 
		 * @param ww 宽度
		 * @param hh 高度
		 * @param TClass 频谱类型
		 * @return 频谱图像
		 * @see SoundSpectrum
		 */
		public function creat (ww:Number=60,hh:Number=40,TClass:Class=null):SoundSpectrum
		{
			if (bg==null)
			{
				bg=new Bitmap(new BitmapData(ww,hh,true,0xFF000000));
			}
			if (TClass == null)
			{
				TClass=SmoothLineSpectrum;
			}
			if (_ss)
			{
				removeChild (_ss);
			}
			_ss=new TClass(ww,hh) as SoundSpectrum;
			_ss.FFTMode=_ff;
			_ss.background=bg;
			//_type=_ss.type;
			index=SoundSpectrumMode.className.indexOf(_ss.type);
			/*if (_ss.background)
			{
			_ss.background.bitmapData=bg.bitmapData;
			trace (bg.bitmapData);
			}
			else
			{
			_ss.background=new Bitmap(new BitmapData(ww,hh,true,0xFF000000));
			bg=_ss.background;
			}*/
			
			_ss.defaultConfig();
					
			addChild (_ss);

			return _ss;
		}
		/**
		 * 当前的声音频谱图像 
		 * @return SoundSpectrum
		 * 
		 */
		public function get soundSpectrum ():SoundSpectrum
		{
			return _ss;
		}
		/**
		 * 当前的声音频谱图像模式 
		 * @return 模式字符串
		 * @see SoundSpectrumMode
		 */
		public function get spectrumType():String
		{
			if(!_ss)
			{
				return null;
			}
			return _ss.type;
		}
		public function set spectrumType(typeName:String):void
		{
			//_type=typeName;
			var tclass:Class=SoundSpectrumMode.getClass(typeName);
			creat (width,height,tclass);
		}
		/**
		 * 一个用于指示是否首先对声音数据执行 Fourier 转换的布尔值。 将此参数设置为 true 会导致方法返回的是频谱而不是原始声音波形。 在频谱中，左侧表示的是低频，右侧表示的是高频。 
		 * @return 
		 * 
		 */
		public function get FFTMode():Boolean
		{
			return _ff;
		}
		public function set FFTMode(b:Boolean):void
		{
			_ff=b;
			_ss.FFTMode=b;
		}
		/**
		 * 下一个模式的频谱图 
		 * 
		 */
		public function next ():void
		{
			if (_ss)
			{
				var l:uint=SoundSpectrumMode.classArray.length;
				index++;
				index%= l;
				creat (width,height,SoundSpectrumMode.classArray[index]);
			}
			else
			{
				creat ();
			}
		}
		/**
		 * 上一个模式的频谱图 
		 * 
		 */
		public function prev ():void
		{
			if (_ss)
			{
				var l:uint=SoundSpectrumMode.classArray.length;
				index=index - 1 + l;
				index%= l;
				creat (width,height,SoundSpectrumMode.classArray[index]);
			}
			else
			{
				creat ();
			}
		}
	}
}